import sqlite3


class SQLiteExecutor:
    def __init__(self, db_path: str):
        """
        初始化 SQLiteExecutor，连接到指定的数据库文件
        :param db_path: SQLite 数据库文件路径
        """
        self.db_path = db_path
        self.connection = None
        self.cursor = None

    def _connect(self):
        """
        连接到数据库，如果已经连接则返回
        """
        if self.connection is None:
            self.connection = sqlite3.connect(self.db_path)
            self.cursor = self.connection.cursor()

    def execute_sql(self, sql: str):
        """
        执行任意 SQL 语句，包括查询和非查询。
        :param sql: SQL 语句字符串
        :return: 查询结果（对于 SELECT 查询），否则返回 None
        """
        try:
            self._connect()

            # 判断 SQL 是否是查询操作
            if sql.strip().lower().startswith("select"):
                res = self.cursor.execute(sql)
                print(res)
                result = self.cursor.fetchall()  # 获取查询结果
                return result
            else:
                # 执行非查询语句（INSERT, UPDATE, DELETE等）
                self.cursor.executescript(sql)
                self.connection.commit()  # 提交更改
                return True

        except sqlite3.Error as e:
            print(f"SQLite error occurred: {e}")
            return False
        finally:
            # 为了确保不泄露资源，commit 之后应该关闭连接
            self.connection.commit()

    def close(self):
        """
        关闭数据库连接
        """
        if self.connection:
            self.connection.close()
            self.connection = None
            self.cursor = None
